/*********************************
*-- 33 KDH Knieja ---------------*
*-- im. Harcerzy Września 1939 --*
*-- autor: Marcin Rzepisko ------*
*-- data: 2013-11-12 ------------*
**********************************/

package net.kdh.knieja.dao.klasy.sqlgenerator;

import net.kdh.knieja.dao.klasy.filtry.FiltrDAO;
import net.kdh.knieja.model.system.token.Token;

/**
 *
 * @author rz.marcin@gmail.com
 */
public class TokenSqlGenerator extends SqlGenerator<Token> {

    public TokenSqlGenerator() {
        super("DANE_LOGOWANIA", "K_AUTORYZACJA");
    }
    
    @Override
    public String generujSelect(FiltrDAO filtr) {
        String query = "SELECT id_uzytkownika, login, token, sesja_od, sesja_do, typ FROM :nazwaTabeli".replaceFirst(":nazwaTabeli", getNazwaTabeli());
        if(filtr == null) {
            return query;
        }
        query += " WHERE :warunki";
        return query.replaceFirst(":warunki", filtr.generujWarunkiSQL());
    }

    @Override
    public String generujInsert(Token t) {
        String query = "INSERT INTO :nazwaTabeli (token, sesja_od, sesja_do) VALUES (:token, :sesjaOd, :sesjaDo) WHERE id_uzytkownika = :idUzytkownika".replaceFirst(":nazwaTabeli", getNazwaTabeli());
        
        return query.replaceFirst(":token", t.getToken())
                    .replaceFirst(":sesjaOd", t.getDataUtworzenia().toString())
                    .replaceFirst(":sesjaDo", t.getDataWygasniecia().toString());
    }

    @Override
    public String generujUpdate(Token t) {
        String query ="";
        String parametry = "";
        if(isNotNull(t.getLogin()) && isNotNull(t.getToken())) {
            query = "UPDATE :nazwaTabeli SET :parametry WHERE login = :login"
                    .replaceFirst(":nazwaTabeli", getNazwaTabeli())
                    .replaceFirst(":login", t.getLogin());
        
                parametry += " token = '" + t.getToken() + "', ";
                parametry += "sesja_od = CURRENT_TIMESTAMP, ";
                parametry += "sesja_od = :dataWygasniecia";
                
                    parametry = parametry.replaceFirst(":dataWygasniecia", 
                            (isNotNull(t.getDataWygasniecia()) 
                                ? t.getDataWygasniecia().toString() : "CURRENT_TIMESTAMP + INTERVAL 4 HOURS"));
                query = query.replaceFirst(":parametry", parametry);
                }
        return query;
    }

    @Override
    public String generujDelete(String login) {
        return "UPDATE :nazwaTabeli SET token = null, sesja_do = null, sesja_od = null WHERE login = '"+login+"'";
    }
}
